<?php

/**
 * @author PeoneEr
 * @package aion personal cabinet v1.0
 * @copyright Aion Factory Inc. 2010-2011
 * @license GNU v3
 * @link Ai-Factory.ru && http://code.google.com/p/aionprivateofficev2
 */
require_once "core/application/models/mipforce/mipforce.php";
require_once "core/application/classes/errorClass.php";

class ipProtect_Controller extends IPForce_Model {

    private static $_instance = NULL;
    private $_ip              = NULL;
    private $_params         = array();

    public static function getInstance() {
        if (is_null(self::$_instance)) {
            $class = __CLASS__;
            self::$_instance = new $class();
        }
        return self::$_instance;
    }

    public function getIp() {
        /**
         *  Получаем реальный IP адрес
         * @return mixed $ip
         */
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
            $this->_ip = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $this->_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $this->_ip = $_SERVER['REMOTE_ADDR'];
        }
        return $this->_ip;
    }

    public function issetIpForce() {
        /**
         *  Проверяем, установлена ли уже защита по IP
         * @var mixed $ip
         * return true or false
         */
        $ipForce = $this->alreadyRestrict($this->getIp());
        if (mysql_num_rows($ipForce)) {
            return true;
        } else {
            return false;
        }
    }

    private function catchParams() {
        /**
         *  "ловим" параметры
         * @vat array $setRestrictData
         */
        $params = array(
            'ip' => $_POST['ip']
        );
        return $params;
    }

    private function twoIps($ip) {
        /**
         *  Сравниваем введенный IP, и тот, что получен через метод getIp()
         * @return true or false
         */
        if ($ip == $this->getIp()) {
            return true;
        } else {
            return false;
        }
    }

    private function testIp($ip) {
        /**
         *  Проверяем IP по регулярному выражению
         * @return true или false
         */
        if (!preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $ip)) {
            return true;
        } else {
            return false;
        }
    }

    public function setProtectIpAddress() {
        /**
         *  Устанавливаем защиту по IP
         */
        $this->_params = $this->catchParams();
        if (!$this->twoIps($this->_params['ip']))
            $this->echoError('
                Введенный IP адрес не совпадает с Вашим нынешним IP адресом
                <br />
                Введенный IP: <input disabled value="' . $this->_params["ip"] . '" />
                <br />
                А Ваш нынешний IP: <input disabled value="' . $this->getIp() . '" />');
        if ($this->testIp($this->_params['ip'])) {
            $this->echoError('IP содержит недопустимые символы');
        }
        try {
            $this->setRestrictIp($this->_params['ip']);
            $this->echoSuccess('Защита на аккаунт <b>' . $_SESSION["login"] . '</b> успешно установлена <br />Защита установлена на IP <b>' . $this->_params["ip"] . '</b>');
        } catch (Exception $e) {
            echo $e->getMessage();
            error::getInstance('Ошибка при установке защиты по IP адресу');
        }
        unset($this->_params);
    }

    public function setProtectIpAddressToNull() {
        /**
         *  Удаление защиты с IP адреса
         */
        //Дополнительная проверка, установлена ли уже защита
        $password = $this->cryptPassword($_POST['password']);
        if ($this->getPassword() != $password) {
            echo "<script language='javascript'>openPasswordAndButton();</script>";
            $this->echoError("Был введен не верный пароль");          
        }
        if (!$this->issetIpForce()) {
            $this->echoError('Защита на данный аккаунт и данный IP адрес не установлена');
        }
        try {
            $this->echoSuccess("Защита с IP адреса " . $this->getIp() . " успешно удалена");
            $this->setToNullIpForce();
        } catch (Exception $e) {
            echo $e->getMessage();
            error::getInstance('Ошибка при установке защиты по IP адресу');
        }
    }

}

?>
